home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / UTILITIE / CPU_MEMO / 3468.ZIP / POPUP.ZIP / ADJALLOC.C next >
C/C++ Source or Header  |  1988-06-30  |  4KB  |  94 lines

  1. /*****************************************************************************
  2. * Module       : ADJALLOC.C                                                  *
  3. *----------------------------------------------------------------------------*
  4. * Program      : ADJALLOC.EXE                                                *
  5. *----------------------------------------------------------------------------*
  6. * Author       : M.R.Watson.    Copyright (c) M.R.Watson 1988                *
  7. *----------------------------------------------------------------------------*
  8. * Last Updated : 30/06/88                                                    *
  9. *----------------------------------------------------------------------------*
  10. *                                 Synopsis                                   *
  11. *                                 ========                                   *
  12. * Adjusts the Maximum paragraph allocation of an EXE file, depending on the  *
  13. * minimum allocation. Usage is ADJALLOC [Filename] [increase in hex]         *
  14. * This is intended to be used with makefiles for TSR's with programs         *
  15. * produced by Microsoft C. It directly modifies the EXE header!              *
  16. *****************************************************************************/
  17.  
  18. #include <stdio.h>
  19. #include <standard.h>
  20.  
  21. struct ExeStr                               /* Structure of EXE file header */
  22. {
  23.     WORD    signature       ;
  24.     WORD    LengthMod512    ;
  25.     WORD    LengthDiv512    ;
  26.     WORD    RelocCount      ;
  27.     WORD    HeaderDiv16     ;
  28.     WORD    MinPara         ;
  29.     WORD    MaxPara         ;
  30.     WORD    SegDisp         ;
  31.     WORD    SPstart         ;
  32.     WORD    CheckSum        ;
  33.     WORD    IPstart         ;
  34.     WORD    CodeSegDisp     ;
  35.     WORD    FirstReloc      ;
  36. };
  37.  
  38.  
  39. /******************************************************************************
  40. *   MAIN  MAIN  MAIN  MAIN  MAIN  MAIN  MAIN  MAIN  MAIN  MAIN  MAIN  MAIN    *
  41. ******************************************************************************/
  42.  
  43. main( argc, argv )
  44. int     argc    ;
  45. char    *argv[] ;
  46. {
  47.     char    filename[81];
  48.     FILE    *fp         ;
  49.     WORD    adjustment  ;
  50.     struct ExeStr header;
  51.  
  52.     if ( argc != 3 )
  53.     {
  54.         printf("\nUsage: ADJALLOC [Filename] [adjustment]\n\n");
  55.         printf("Where [Filename] is the name of the EXE file to have it's maximum\n");
  56.         printf("      memory allocation adjusted. (If no extent is given, \"EXE\" is used.)\n");
  57.         printf("and   [adjustment] will be used to set the maximum paragraph allocation\n");
  58.         printf("      as follows: Max alloc = Min alloc + adjustment.\n");
  59.         printf("      The adjustment must be given in hex.\n\n");
  60.     }
  61.  
  62.     strcpy( filename, argv[1] );
  63.  
  64.     if ( strchr( filename, '.' ) == NULL )
  65.         strcat( filename, ".EXE" );
  66.  
  67.     adjustment = strtol( argv[2], NULL, 16 );
  68.  
  69.     if ( (fp = fopen( filename, "r+b" )) == NULL )
  70.     {
  71.         printf("\nError : Can't open %s\n", filename );
  72.         exit(FAIL);
  73.     }
  74.  
  75.     if ( fread( &header, sizeof(header), 1, fp ) != 1 )
  76.     {
  77.         printf("Error - %s is a bad EXE file.\n", filename );
  78.         exit(FAIL);
  79.     }
  80.  
  81.     rewind(fp);
  82.     header.MaxPara = header.MinPara + adjustment ;
  83.  
  84.     if ( fwrite( &header, sizeof(header), 1, fp ) != 1 )
  85.     {
  86.         printf("Error writing to %s - file may be corrupt!\n");
  87.         exit(FAIL);
  88.     }
  89.  
  90.     fclose(fp);
  91.     exit(SUCCEED);
  92. }
  93.  
  94.